var oTable;
var zTree;
$(function () {
    // 1.初始化Table
    oTable = new TableInit();
    oTable.Init();

    $("#btn_query").bind("click", query);//查询按钮
    $("#btn_add").bind("click", openAdd);
    $("#m_btn").bind("click", add);
    $("#btn_menu").bind("click", getCheckedMenu);
    $("#search_name").bind("keydown", inputKeyDown);

    $('#myModal').on('hidden.bs.modal', modalHiddenEvent);//模态框隐藏触发
    $('#menuModal').on('hidden.bs.modal', menuModalHiddenEvent);//模态框隐藏触发



    $.fn.zTree.init($("#menuTree"), setting);
    zTree = $.fn.zTree.getZTreeObj("menuTree");
    // $("#tb_role").on('load-success.bs.table', function (data) {
    //     console.log("加载完毕")
    // });


});

/**
 * 模态框隐藏后 清空form表单数据
 */
function modalHiddenEvent() {
    $('#roleForm')[0].reset();
}

var TableInit = function () {
    var oTableInit = new Object();
    // 初始化Table
    oTableInit.Init = function () {
        $('#tb_role').bootstrapTable({
            url: '/do/role/getAllPage', // 请求后台的URL（*）
            method: 'get', // 请求方式（*）
            contentType: "application/x-www-form-urlencoded",//post 必须制定类型，否则不能正常传值
            toolbar: '#toolbar', // 工具按钮用哪个容器
            striped: true, // 是否显示行间隔色
            cache: false, // 是否使用缓存，默认为true，所以一般情况下需要设置一下这个属性（*）
            pagination: true, // 是否显示分页（*）
            sortName: "id",//默认排序列
            sortable: true, // 是否启用排序
            sortOrder: "asc", // 排序方式
            queryParams: oTableInit.queryParams,// 传递参数（*）
            sidePagination: "server", // 分页方式：client客户端分页，server服务端分页（*）
            pageNumber: 1, // 初始化加载第一页，默认第一页
            pageSize: 10, // 每页的记录行数（*）
            pageList: [10, 15, 20], // 可供选择的每页的行数（*）
            search: false, // 是否显示表格搜索，此搜索是客户端搜索，不会进服务端，所以，个人感觉意义不大
            strictSearch: true,
            showColumns: true, // 是否显示所有的列
            showRefresh: true, // 是否显示刷新按钮
            minimumCountColumns: 2, // 最少允许的列数
            clickToSelect: true, // 是否启用点击选中行
            singleSelect: true,//开启单选，默认为多选
            height: 500, // 行高，如果没有设置height属性，表格自动根据记录条数觉得表格高度
            uniqueId: "id", // 每一行的唯一标识，一般为主键列
            showToggle: false, // 是否显示详细视图和列表视图的切换按钮
            cardView: false, // 是否显示详细视图
            detailView: false, // 是否显示父子表
            columns: [{
                checkbox: true
            }, {
                field: 'name',
                title: '角色名',
            }, {
                field: 'flag',
                title: '标识'
            }, {
                field: 'xjhuiyuan',
                title: '下级最大会员数'
            }, {
                field: 'id',
                title: '操作',
                formatter: function (data, row, index) {
                    var temp = ""
                    temp = "<a href='javascript:void(0)' onclick=edit('" + data + "','" + row.name + "','" + row.flag + "','"+row.xjhuiyuan+"')>编辑</a>  &nbsp;&nbsp;";
                    temp += "<a href='javascript:void(0)' onclick=dele('" + data + "')>删除</a>   &nbsp;&nbsp;";
                    temp += "<a href='javascript:void(0)' onclick=menuJoin('" + data + "','" + row.name+ "')>关联菜单</a>  ";
                    return temp;
                }
            }]
        });
    };

    // 得到查询的参数
    oTableInit.queryParams = function (params) {
        var page = (params.offset / params.limit) + 1;
        var temp = { // 这里的键的名字和控制器的变量名必须一直，这边改动，控制器也需要改成一样的
            size: params.limit, // 页面大小
            page: page, // 第几页
            name: $("#search_name").val(),
            search: params.search,
            order: params.order,
            sort: params.sort
        };
        return temp;
    };

    return oTableInit;
};

function query() {
    $("#tb_role").bootstrapTable('refresh');
}

//输入框绑定回车事件
function inputKeyDown(e) {
    if (e && e.keyCode == 13) {
        $("#tb_role").bootstrapTable('refresh');
    }
}

//打开新增角色的模态框
function openAdd() {
    $('#myModal').modal('show');
    $('#myModalLabel').html("");
}

function add() {
    saveOrUpdate();
}

//编辑角色
function edit(id, name, flag,xj) {
    $("#roleName").val(name);
    $("#roleFlag").val(flag);
    $("#roleId").val(id);
    $("#xjhuiyuan").val(xj);
    $('#myModal').modal('show');
    $('#myModalLabel').html("编辑角色");
}

function dele(id) {
    Ewin.confirm({message: "确认要删除该角色吗？"}).on(function (e) {
        if (!e) {
            return;
        }
        $.ajax({
            type: 'delete',
            url: '/do/role/' + id,
            dataType: "json",
            success: function (data) {
                if (data.code == 1) {
                    $("#tb_role").bootstrapTable('refresh');
                } else {
                    Ewin.alert(data.msg)
                }
            }
        });
    });
}

function saveOrUpdate() {
    var name = $("#roleName").val();
    var flag = $("#roleFlag").val();
    var xjhuiyuan=$("#xjhuiyuan").val();

    if (name == "" || name == null) {
        return;
    }
    if (flag == "" || flag == null) {
        return;
    }
    if (xjhuiyuan == "" || xjhuiyuan == null) {
        return;
    }
    $("#m_btn").attr('disabled', "true");
    $.ajax({
        type: 'post',
        url: '/do/role/edit',
        data: {
            id: $("#roleId").val(),
            name: name,
            flag: flag,
            xjhuiyuan:xjhuiyuan
        },
        dataType: "json",
        success: function (data) {
            $('#m_btn').removeAttr("disabled");
            if (data.code == 1) {
                $('#myModal').modal('toggle');
                $("#tb_role").bootstrapTable('refresh');
            } else {
                Ewin.alert(data.msg)
            }
        }
    });
}


////////////菜单相关//////////////////////////////
var roleId = "";

function menuJoin(id,menuName) {
    roleId = id;
    $('#menuModalLabel').html(menuName+"-关联菜单");
    //打开菜单模态框
    $('#menuModal').modal('show');
    //查询该角色的所有菜单，并设置树为选中状态
    //更好的做法：在查询角色的时候，就将角色的菜单关联出来，此处就可以不用去查询数据库
    $.ajax({
        type: 'get',
        url: '/do/menu/roleId/' + id,
        dataType: "json",
        success: function (data) {
            if (data.code == 1) {
                $(data.data).each(function () {
                    zTree.checkNode(zTree.getNodeByParam("id", this.id, null), true, false);
                });
            } else {
                Ewin.alert(data.msg)
            }
        }
    });
}

//关闭模态框，取消所有的选中项
function menuModalHiddenEvent() {
    zTree.checkAllNodes(false);
    roleId = "";
}

var setting = {
    async: {
        enable: true,
        url: "/do/menu/getAll",
        dataType: "json"
    },
    check: {
        enable: true
    },
    data: {
        simpleData: {
            enable: true,
            idKey: "id",
            pIdKey: "pid",
        }
    },
    callback: {
        onAsyncSuccess: zTreeOnAsyncSuccess,
        onClick: zTreeOnClick
    }
};

//选中的时候，关联check方法
function zTreeOnClick(event, treeId, treeNode) {
    zTree.checkNode(treeNode, !treeNode.checked, true);
}

//加载完后展开菜单
function zTreeOnAsyncSuccess(event, treeId, msg) {
    var nodes = zTree.getNodes();
    for (var i = 0; i < nodes.length; i++) { //设置节点展开
        zTree.expandNode(nodes[i], true, false, true);
    }
}

function getCheckedMenu() {
    var nodes = zTree.getCheckedNodes(true);
    // if ( nodes.length == 0) {
    //     Ewin.alert("请先选择一个菜单再提交");
    // }
    var ids = "null,"
    $.each(nodes, function () {
        ids += this.id + ","
    });
    $.ajax({
        type: 'put',
        url: '/do/role/' + roleId + "/menus/" + ids,
        dataType: "json",
        success: function (data) {
            if (data.code == 1) {
                $('#menuModal').modal('toggle');
            } else {
                Ewin.alert(data.msg)
            }
        }
    });
}